/**
在 TypeScript 中，函数重载（Function Overloading）允许你为同一个函数定义多个签名，以支持不同的参数类型和数量。结合联合类型（Union Types）使用时，可以使函数更加灵活，以适应多种输入类型。
  1. 函数重载的基本概念
  函数重载是指在同一个函数名下定义多个不同的参数签名。TypeScript 在调用函数时会根据传入的参数类型来选择合适的重载签名。

  2. 联合类型的定义
  联合类型允许一个变量可以是多种类型中的一种，使用  `|`  符号来定义。例如： `string | number`  表示该变量可以是字符串或数字。

  3. 函数重载与联合类型结合使用
  在定义函数重载时，可以使用联合类型来表示参数可以接受多种类型。这使得函数能够处理不同类型的输入。

   示例：
  function format(value: string): string; // 重载签名1
  function format(value: number): string; // 重载签名2
  function format(value: boolean): string; // 重载签名3
  function format(value: string | number | boolean): string { // 实现签名
      return `Formatted value: ${value}`;
  }

  console.log(format("Hello")); // 输出: Formatted value: Hello
  console.log(format(42));      // 输出: Formatted value: 42
  console.log(format(true));    // 输出: Formatted value: true
  在这个示例中， `format`  函数可以接受字符串、数字或布尔值，并对其进行格式化。

  4. 注意事项
  - 实现签名：在函数的实现部分，必须使用一个包含所有重载参数类型的联合类型作为参数类型。
  - 顺序：重载签名的顺序不影响功能，但建议将更具体的签名放在前面，以提高可读性。
  - 类型安全：在实现函数时，需要确保对不同类型的处理逻辑是安全的，以避免运行时错误。

  5. 结论
  函数重载结合联合类型是 TypeScript 中一个强大的特性，可以使函数更加灵活和可扩展。通过合理使用函数重载和联合类型，可以设计出更为健壮和易用的函数接口，从而提高代码的可读性和可维护性。在实际开发中，建议在函数需要支持多种输入类型时使用此特性。
 */
  // 1.普通的实现
  // function getLength(arg) {
  //   return arg.length
  // }

  // 2.函数的重载
  // function getLength(arg: string): number
  // function getLength(arg: any[]): number
  // function getLength(arg) {
  //   return arg.length
  // }

  // 3.联合类型实现(可以使用联合类型实现的情况, 尽量使用联合类型)
  function getLength(arg: string | any[]) {
    return arg.length
  }

  getLength("aaaaa")
  getLength(["abc", "cba", "nba"])
  // getLength({ name: "why", length: 100 })

  export {}